হাদুপ (Hadoop) এর MapReduce মডেল প্রধানত বড় ডেটাসেটের সমান্তরাল প্রক্রিয়াকরণে ব্যবহৃত হয়। তবে, কিছু পরিস্থিতিতে Secondary Sorting এবং Joins-এর মতো উন্নত (Advanced) কৌশলগুলি প্রয়োগ করা প্রয়োজন, যাতে আরও জটিল ডেটা প্রসেসিং এবং বিশ্লেষণ সম্ভব হয়। এই প্রযুক্তিগুলি বড় ডেটা প্রক্রিয়াকরণের প্রয়োজনীয়তা মেটাতে সাহায্য করে।
Secondary Sorting
Secondary Sorting হল একটি প্রক্রিয়া যেখানে MapReduce কাজের সময় ডেটা বিভিন্ন ক্রমে সাজানো হয়। সাধারণত, হাদুপের MapReduce ফেজে Sort করার সময় কী (Key) অনুযায়ী ডেটা সাজানো হয়। কিন্তু অনেক সময় আমাদের secondary key বা secondary sort করতে হয়, যেখানে প্রথম কী একসাথে সাজানো থাকে, এবং দ্বিতীয় কী অনুযায়ী ডেটা সাজানো হয়।
Secondary Sorting কেন দরকার?
MapReduce-এর Shuffle and Sort পর্যায়ে শুধুমাত্র মূল কী (Primary Key) অনুযায়ী ডেটা সাজানো হয়, কিন্তু কিছু ক্ষেত্রে একাধিক কী-এর ওপর ভিত্তি করে সাজানোর প্রয়োজন হতে পারে। Secondary Sorting ব্যবহার করে এই সমস্যার সমাধান করা যায়, যাতে একই কী-এর মধ্যে অন্য কী (Secondary Key) অনুযায়ী ডেটা সাজানো হয়।
Secondary Sorting এর উদাহরণ
ধরা যাক, আপনার কাছে কিছু Student নামের ডেটা রয়েছে, যেখানে প্রথম কী হলো Student Name এবং দ্বিতীয় কী হলো Marks। আপনি যদি প্রথমে নাম অনুযায়ী সাজাতে চান, কিন্তু তারপরে একই নামের শিক্ষার্থীদের মার্কসের ওপর ভিত্তি করে সাজাতে চান, তবে Secondary Sorting ব্যবহার করা হবে।
Secondary Sorting বাস্তবায়ন
Secondary Sorting বাস্তবায়নের জন্য, আপনাকে কিছু অতিরিক্ত পদক্ষেপ নিতে হবে:
- Custom Writable Comparable তৈরি করুন:
আপনাকে WritableComparable ইন্টারফেস ইমপ্লিমেন্ট করে একটি কাস্টম কিও-ব্লক তৈরি করতে হবে, যা প্রথম কী এবং দ্বিতীয় কী (Secondary Key) ধারণ করবে। - Map Function:
Map ফেজে আপনি কাস্টম কী-ভ্যালু পেয়ার তৈরি করবেন এবং এই কাস্টম কী অনুযায়ী Sorting করতে পারবেন। - Sort Function:
Sort ফেজে আপনাকে Secondary Sorting এর জন্য Comparator সেট করতে হবে।
Joins in Hadoop MapReduce
Joins হাদুপের MapReduce-এ একটি গুরুত্বপূর্ণ টেকনিক যা আপনাকে দুটি বা ততোধিক ডেটাসেটের মধ্যে সম্পর্ক (Relation) তৈরি করতে দেয়। সাধারণত, একাধিক ডেটাসেটের মধ্যে সম্পর্ক বের করতে Join ব্যবহৃত হয়। কিন্তু MapReduce এর প্রথাগত পদ্ধতিতে দুটি ডেটাসেটের মধ্যে Join করার কাজটি একটু জটিল হতে পারে।
Types of Joins
হাদুপে তিন ধরনের Join টেকনিক ব্যবহৃত হয়:
1. Map-side Join
Map-side Join তখন ব্যবহার করা হয় যখন দুটি ডেটাসেট ছোট এবং একে অপরের সাথে সম্পর্কিত থাকে। এই প্রক্রিয়ায় ডেটাগুলিকে মেমোরিতে লোড করা হয় এবং Map ফেজে ডেটা Join করা হয়। এটি Reduce ফেজে লোড ও শফলিং অপারেশন কমিয়ে দেয়, ফলে এটি দ্রুত এবং আরও কার্যকরী হয়।
Map-side Join বাস্তবায়ন:
public class MapSideJoinMapper extends Mapper<LongWritable, Text, Text, Text> {
private Map<String, String> lookupTable = new HashMap<>();
protected void setup(Context context) throws IOException, InterruptedException {
// ছোট ডেটাসেটটি মেমোরিতে লোড করা
Configuration conf = context.getConfiguration();
String fileName = conf.get("lookup.file");
Path path = new Path(fileName);
FileSystem fs = FileSystem.get(conf);
BufferedReader reader = new BufferedReader(new InputStreamReader(fs.open(path)));
String line;
while ((line = reader.readLine()) != null) {
String[] parts = line.split(",");
lookupTable.put(parts[0], parts[1]);
}
}
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
// ডেটা Join করা
String[] record = value.toString().split(",");
String lookupValue = lookupTable.get(record[0]);
if (lookupValue != null) {
context.write(new Text(record[0]), new Text(record[1] + "," + lookupValue));
}
}
}
2. Reduce-side Join
Reduce-side Join তখন ব্যবহার করা হয় যখন দুটি ডেটাসেট খুব বড় এবং মেমোরিতে লোড করা সম্ভব নয়। এই পদ্ধতিতে ডেটাগুলি Shuffle and Sort ফেজে একত্রিত হয় এবং Reduce ফেজে একসাথে যোগ করা হয়। যদিও এটি ধীরগতিতে কাজ করতে পারে, তবে এটি বড় ডেটাসেটের জন্য কার্যকর।
Reduce-side Join বাস্তবায়ন:
public class ReduceSideJoinReducer extends Reducer<Text, Text, Text, Text> {
public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
String value1 = null;
for (Text val : values) {
if (value1 == null) {
value1 = val.toString(); // প্রথম ডেটাসেটের মান
} else {
context.write(key, new Text(value1 + "," + val.toString())); // Join করা
}
}
}
}
3. Composite Join
Composite Join একটি সংমিশ্রিত পদ্ধতি, যেখানে Map-side Join এবং Reduce-side Join এর সংমিশ্রণ ঘটানো হয়। এটি তখন ব্যবহৃত হয় যখন একাধিক ডেটাসেটের মধ্যে সম্পর্ক তৈরি করতে হয়।
সারাংশ
হাদুপে Secondary Sorting এবং Joins বেশ গুরুত্বপূর্ণ এবং শক্তিশালী টেকনিক। Secondary Sorting দুটি কী অনুযায়ী ডেটা সাজাতে সাহায্য করে, যেখানে Joins বিভিন্ন ডেটাসেটের মধ্যে সম্পর্ক তৈরি করতে ব্যবহৃত হয়। Map-side Join এবং Reduce-side Join উভয়ই বড় ডেটাসেটের মধ্যে সম্পর্ক সৃষ্টি করতে ব্যবহার করা হয়, তবে একে অপরের মধ্যে পারফরমেন্স পার্থক্য থাকতে পারে, নির্ভর করে ডেটার আকার এবং কাঠামোর ওপর।
Read more